#pragma once
#include <QWidget>
#include <QHBoxLayout>
#include <QMap>
#include <qmutex.h>
#include <memory>
#include "devicesingleview.h"

namespace Ui {
    class DeviceView;
}

class DeviceView : public QWidget
{
    Q_OBJECT

public:
    DeviceView(QWidget* parent = nullptr);
    ~DeviceView();

    void addView(const QString& name);
    void removeView();
    void removeCurView(const QString& name);
    QStringList getViewNames();

    bool saveImage(const QString& name, const QString& filePath, const QString& imageFormat = "PNG", int imageQuality = -1);

    void setError(const QString& name, const QString& msg);
    QString getError(const QString& name);
    void clearError(const QString& name);
    bool isError(const QString& name);

    void setPath(const QString& name, const QString& path);
    QString getPath(const QString& name);
    QHash<QString, std::shared_ptr<DeviceSingleView>>& Getviews() { return views; }

public slots:
    void updateImageD(const QString& name, const QImage& image);
    void updateImageS(const QString& name, const QImage& image);
    void updateImageH(const QString& name, const QImage& image);
    void updateImageDMD(const QString& name, const QImage& image);
    void updateImage(const QString& name, const QImage& image);

private:
    Ui::DeviceView* ui;

    QHBoxLayout* controlsLayout1;
    QHBoxLayout* controlsLayout2;
    QVBoxLayout* centralLayout;
    int             cntLayout;

    QHash<QString, QHBoxLayout*> cameraLayout;
    QHash<QString, std::shared_ptr<DeviceSingleView>> views;
};